package br.com.foxinline.manager.pesquisar.titulodocumento;

import br.com.foxinline.enums.TipoPessoa;
import br.com.foxinline.modelo.Anexo;
import br.com.foxinline.modelo.Pessoa;
import br.com.foxinline.modelo.ep.Parte;
import br.com.foxinline.modelo.ep.SeloEP;
import br.com.foxinline.modelo.titulodocumento.AtoTipoTituloDocumento;
import br.com.foxinline.modelo.titulodocumento.QualidadeTituloDocumento;
import br.com.foxinline.modelo.titulodocumento.TituloDocumento;
import br.com.foxinline.servico.titulodocumento.AtoTipoTituloDocumentoServico;
import br.com.foxinline.servico.titulodocumento.QualidadeTituloDocumentoServico;
import br.com.foxinline.servico.titulodocumento.TituloDocumentoServico;
import br.com.foxinline.utilitario.Caracteres;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;

/**
 *
 * @author cadomeireles
 */
@ViewScoped
@ManagedBean
public class ManagerPesquisarTituloDocumento implements Serializable {

    @EJB
    TituloDocumentoServico tituloDocumentoServico;
    @EJB
    AtoTipoTituloDocumentoServico atoTipoServico;
    @EJB
    QualidadeTituloDocumentoServico qualidadeServico;
    private TituloDocumento tituloDocumento;
    private List<TituloDocumento> titulosDocumentos;
    private Parte partePesquisar;
    private TituloDocumento tituloDocumentoVisualizar;
    private List<Parte> partesVisualizar;
    private List<SeloEP> selosEPVisualizar;
    private List<Anexo> anexosVisualizar;
    private TituloDocumento tituloDocumentoDeletar;
    private String visualizarId;

    @PostConstruct
    public void init() {
        instanciar();
        delegar();
    }

    private void instanciar() {
        this.tituloDocumento = new TituloDocumento();
        this.tituloDocumentoDeletar = new TituloDocumento();
        this.titulosDocumentos = new ArrayList<TituloDocumento>();

        this.partePesquisar = new Parte();
        Pessoa pessoa = new Pessoa();
        pessoa.setTipoPessoa(TipoPessoa.FISICA);
        this.partePesquisar.setPessoa(pessoa);
    }

    private void delegar() {
        Map<String, String> parametros = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
        this.visualizarId = parametros.get("tituloDocumentoId");

        if (visualizarId != null) {
            this.tituloDocumentoVisualizar = tituloDocumentoServico.pesquisar(Long.parseLong(visualizarId));
            this.partesVisualizar = tituloDocumentoServico.obterPartes(this.tituloDocumentoVisualizar);
            this.selosEPVisualizar = tituloDocumentoServico.obterSelos(this.tituloDocumentoVisualizar);
            this.anexosVisualizar = tituloDocumentoServico.obterAnexos(this.tituloDocumentoVisualizar);
        }
    }

    public void pesquisar() {
        this.titulosDocumentos = tituloDocumentoServico.pesquisar(this.tituloDocumento, this.partePesquisar);
    }

    public void deletar() {
        tituloDocumentoServico.deletar(this.tituloDocumentoDeletar);

        ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
        FacesContext fc = FacesContext.getCurrentInstance();
        FacesContext.getCurrentInstance().addMessage("messages", new FacesMessage(FacesMessage.SEVERITY_INFO, "Título e Documento excluído com sucesso!", ""));
        fc.getExternalContext().getFlash().setKeepMessages(true);

        try {
            context.redirect("pesquisarTituloDocumento.xhtml");
        } catch (IOException ex) {
            Logger.getLogger(ManagerPesquisarTituloDocumento.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void limpar() {
        instanciar();
    }

    public String adicionarMascaraCNPJ(String string) {
        return Caracteres.adicionarMascara(string, Caracteres.cnpjMask);
    }

    public String adicionarMascaraCPF(String string) {
        return Caracteres.adicionarMascara(string, Caracteres.cpfMask);
    }

    public List<AtoTipoTituloDocumento> autocompletarAtoTipo(String query) {
        return atoTipoServico.autocompletar(query);
    }

    public List<QualidadeTituloDocumento> autocompletarQualidade(String query) {
        return qualidadeServico.autocompletar(query, this.tituloDocumento.getAtoTipo());
    }

    public TituloDocumento getTituloDocumento() {
        return tituloDocumento;
    }

    public List<Anexo> getAnexosVisualizar() {
        return anexosVisualizar;
    }

    public void setAnexosVisualizar(List<Anexo> anexosVisualizar) {
        this.anexosVisualizar = anexosVisualizar;
    }

    public Parte getPartePesquisar() {
        return partePesquisar;
    }

    public void setPartePesquisar(Parte partePesquisar) {
        this.partePesquisar = partePesquisar;
    }

    public List<Parte> getPartesVisualizar() {
        return partesVisualizar;
    }

    public void setPartesVisualizar(List<Parte> partesVisualizar) {
        this.partesVisualizar = partesVisualizar;
    }

    public List<SeloEP> getSelosEPVisualizar() {
        return selosEPVisualizar;
    }

    public void setSelosEPVisualizar(List<SeloEP> selosEPVisualizar) {
        this.selosEPVisualizar = selosEPVisualizar;
    }

    public TituloDocumento getTituloDocumentoDeletar() {
        return tituloDocumentoDeletar;
    }

    public void setTituloDocumentoDeletar(TituloDocumento tituloDocumentoDeletar) {
        this.tituloDocumentoDeletar = tituloDocumentoDeletar;
    }

    public TituloDocumento getTituloDocumentoVisualizar() {
        return tituloDocumentoVisualizar;
    }

    public void setTituloDocumentoVisualizar(TituloDocumento tituloDocumentoVisualizar) {
        this.tituloDocumentoVisualizar = tituloDocumentoVisualizar;
    }

    public List<TituloDocumento> getTitulosDocumentos() {
        return titulosDocumentos;
    }

    public void setTitulosDocumentos(List<TituloDocumento> titulosDocumentos) {
        this.titulosDocumentos = titulosDocumentos;
    }
}
